Passa al contenuto principale
Versione: 2025-26

Simulatore processore sEP8

Il processore sEP8 (Simple Educational Processor 8 bit) è un semplice processore a 8 bit, descritto nel libro Dalle porte AND OR NOT al sistema calcolatore del prof. Paolo Corsini e utilizzato nel corso per presentare i meccanismi fondamentali di un processore e la realizzazione dello stesso in hardware tramite il linguaggio Verilog. Oltre che a questi scopi didattici, è anche una buona base di partenza per esplorare architetture di processori e le loro implementazioni in hardware.

Nel repository https://github.com/Unipisa/sEP8 contiene codice utilizzabile per simulare il processore, sperimentarne estensioni etc.

Attribuzione

Il codice attualmente presente nel repository è frutto del lavoro di Nicola Ramacciotti nell'ambito della sua Tesi di Laurea in Ingegneria Informatica, dal titolo "Design e implementazione di un ambiente di simulazione e testing in Verilog per il processore sEP8".

Siamo disponibili a seguire tesi triennali sull'argomento.

Lancio di simulazioni

Il codice sorgente fornito include tutto il necessario per simulare l'architettura sEP8 e osservare il suo comportamento interno durante l'esecuzione di un semplice programma.

> iverilog -o sEP8  .\sEP8.v .\MEMORIA.v .\RAM.v .\ROM.v .\IO.v .\clock_generator.v .\testbench.v
> vvp ./sEP8
VCD info: dumpfile waveform.vcd opened for output.
ABCDEFGHIJKLMNOPQRSTUVWXYZ
Simulazione terminata: il processore ha eseguito un'istruzione HLT

I caratteri che vediamo stampati (da A a Z) sono l'output del programma contenuto in ROM.v.

Dal file waveform.vcd, possiamo studiare il comportamento del processore.


Vista di GTKWave durante una simulazione del processore.

Caricamento di programmi tramite ROM

In questo simulatore, il programma da eseguire è caricato tramite un modulo ROM, che viene montato a partire dall'indirizzo 24'hFF0000. Tale modulo dovrà contenere le sequenze di byte corrispondenti alle istruzioni del programma.

Un assemblatore basilare è fornito come script python, che traduce semplici programmi assembler per questo processore in un modulo ROM contenente la giusta sequenza di byte.

Riferimenti storici: le cartucce

Questo modo di caricare i programmi non è solo una semplificazione a scopo didattico, ma ha anche degli esempi storici concreti.

Infatti operavano così le prime console, dove gli esempi più famosi sono probabilmente le console Nintendo come N64 e GameBoy. In queste console, ciascun gioco è fornito come una cartuccia che va inserita nella console prima di accenderla. Ciascuna cartuccia è del vero e proprio hardware che contiene la ROM dentro la quale è scritto il programma del gioco, e i pin che collegano la cartuccia e la console sono proprio fili di indirizzamento e dati.

In realtà, permettendo generiche letture e scritture al range di indirizzi a cui è montata la cartuccia, questa poteva contenere diversi tipi di hardware, inclusi chip di RAM aggiuntivi, chip di memoria persistente per permettere di salvare il gioco, o ancora hardware dedicato come rumble pak o fotocamera.